package com.zjcloud.jwgl.exception;

/**
 * 模板验证异常类
 * 用于处理排课约束模板相关的验证错误
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public class TemplateValidationException extends RuntimeException {
    
    private static final long serialVersionUID = 1L;
    
    /** 错误代码 */
    private String errorCode;
    
    /** 模板名称 */
    private String templateName;
    
    /** 缺失的约束条件数量 */
    private Integer missingConstraints;
    
    /**
     * 构造函数
     * 
     * @param message 错误消息
     */
    public TemplateValidationException(String message) {
        super(message);
    }
    
    /**
     * 构造函数
     * 
     * @param message 错误消息
     * @param cause 原因
     */
    public TemplateValidationException(String message, Throwable cause) {
        super(message, cause);
    }
    
    /**
     * 构造函数
     * 
     * @param errorCode 错误代码
     * @param message 错误消息
     * @param templateName 模板名称
     */
    public TemplateValidationException(String errorCode, String message, String templateName) {
        super(message);
        this.errorCode = errorCode;
        this.templateName = templateName;
    }
    
    /**
     * 构造函数
     * 
     * @param errorCode 错误代码
     * @param message 错误消息
     * @param templateName 模板名称
     * @param missingConstraints 缺失的约束条件数量
     */
    public TemplateValidationException(String errorCode, String message, String templateName, Integer missingConstraints) {
        super(message);
        this.errorCode = errorCode;
        this.templateName = templateName;
        this.missingConstraints = missingConstraints;
    }
    
    /**
     * 获取错误代码
     * 
     * @return 错误代码
     */
    public String getErrorCode() {
        return errorCode;
    }
    
    /**
     * 设置错误代码
     * 
     * @param errorCode 错误代码
     */
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    
    /**
     * 获取模板名称
     * 
     * @return 模板名称
     */
    public String getTemplateName() {
        return templateName;
    }
    
    /**
     * 设置模板名称
     * 
     * @param templateName 模板名称
     */
    public void setTemplateName(String templateName) {
        this.templateName = templateName;
    }
    
    /**
     * 获取缺失的约束条件数量
     * 
     * @return 缺失的约束条件数量
     */
    public Integer getMissingConstraints() {
        return missingConstraints;
    }
    
    /**
     * 设置缺失的约束条件数量
     * 
     * @param missingConstraints 缺失的约束条件数量
     */
    public void setMissingConstraints(Integer missingConstraints) {
        this.missingConstraints = missingConstraints;
    }
    
    /**
     * 获取详细错误信息
     * 
     * @return 详细错误信息
     */
    public String getDetailedMessage() {
        StringBuilder sb = new StringBuilder();
        sb.append("模板验证失败: ").append(getMessage());
        
        if (templateName != null) {
            sb.append(", 模板名称: ").append(templateName);
        }
        
        if (errorCode != null) {
            sb.append(", 错误代码: ").append(errorCode);
        }
        
        if (missingConstraints != null && missingConstraints > 0) {
            sb.append(", 缺失约束条件数量: ").append(missingConstraints);
        }
        
        return sb.toString();
    }
}